#if !defined(__APP_SERIAL_H)
#define __APP_SERIAL_H

#include "app_device.h"
#include <termios.h>

// 波特率
typedef enum
{
    BR_9600 = B9600,
    BR_115200 = B115200,
}BaudRate_t;

// 校验位
typedef enum
{
    PARITY_NONE = 0,
    PARITY_ODD = PARENB | PARODD,
    PARITY_EVEN = PARENB,
}Parity_t;

// 停止位
typedef enum
{
    SB_1 = 0,
    SB_2 = CSTOPB,
}StopBit_t;

/**
 * @brief 设置串口的波特率
 * 
 * @param dev 串口文件描述符
 * @param baudRate 波特率
 * @return int 成功返回0，失败返回-1
 */
int app_serial_setBaudRate(Device_t *dev, BaudRate_t baudRate);

/**
 * @brief 设置串口的校验位
 * 
 * @param dev 串口文件描述符
 * @param parity 校验位
 * @return int 成功返回0，失败返回-1
 */
int app_serial_setParity(Device_t *dev, Parity_t parity);

/**
 * @brief 设置串口的停止位
 * 
 * @param dev 串口文件描述符
 * @param stopBit 停止位
 * @return int 成功返回0，失败返回-1
 */
int app_serial_setStopBit(Device_t *dev, StopBit_t stopBit);

/**
 * @brief 设置串口的阻塞模式
 * 
 * @param dev 串口文件描述符
 * @param block 阻塞模式
 * @return int 成功返回0，失败返回-1
 */
int app_serial_setBlock(Device_t *dev, int is_block);

/**
 * @brief 设置串口为原始模式
 * 
 * @param dev 串口文件描述符
 * @return int 成功返回0，失败返回-1
 */
int app_serial_setRaw(Device_t *dev);

/**
 * @brief 刷新串口缓冲区
 * 
 * @param dev 串口文件描述符
 * @return int 成功返回0，失败返回-1
 */
int app_serial_flush(Device_t *dev);

/**
 * @brief 初始化串口
 * 
 * @param dev 串口文件描述符
 * @return int 成功返回0，失败返回-1
 */
int app_serial_init(Device_t *dev);

#endif // __APP_SERIAL_H